package controller;

import java.util.ArrayList;
import java.util.List;

import model.Area;
import model.Plato;
import beans.PlatoBean;
import dao.HibernatePlatoDAO;
import dto.PlatoDTO;

public class AdministradorPlato {
	private static AdministradorPlato instancia;
	private AdministradorPlato(){
		
	}
	public static AdministradorPlato getInstancia(){
		if(instancia==null)
			instancia=new AdministradorPlato();
		return instancia;
	}
	public PlatoBean fromModelTOBean(Plato plato) {
		PlatoBean platoBean=null;
		if(plato!=null){
			platoBean=new PlatoBean();
			platoBean.setIdPlato(plato.getId());
			
			//platoBean.setArea(AdministradorArea.getInstancia().fromModelTOBean(plato.getArea())); SE AGREGA EN EL ADMINISTRADOR DE AREA CUANDO LO LLAMA
			platoBean.setComisionExtra(plato.getComisionExtra());
			platoBean.setNombre(plato.getNombre());
			platoBean.setPlatosAlternativos(AdministradorPlato.getInstancia().fromModelTOBean(plato.getPlatosAlternativos()));
			platoBean.setPrecio(plato.getPrecio());
			platoBean.setReceta(AdministradorReceta.getInstancia().fromModelTOBean(plato.getReceta()));
		}
		return platoBean;
	}
	
	public List<PlatoBean> fromModelTOBean(List<Plato> platosAlternativos) {
		List<PlatoBean> platosAltBean=new ArrayList<PlatoBean>();
		
		for (Plato plato : platosAlternativos) {
			PlatoBean platoBean=this.fromModelTOBean(plato);
			platosAltBean.add(platoBean);
		}
		
		return platosAltBean;
	}
	public List<Plato> fromDTOTOModel(List<PlatoDTO> platosDTO) {
		List<Plato> platosAlt=new ArrayList<Plato>();
		
		for (PlatoDTO platoDTO : platosDTO) {
			Plato plato=this.fromDTOTOModel(platoDTO);
			platosAlt.add(plato);
		}
		
		return platosAlt;
	}
	public Plato fromDTOTOModel(PlatoDTO platoDTO) {
		Plato plato=null;
		if(platoDTO!=null){
		plato=new Plato();
		plato.setId(platoDTO.getId());
		//plato.setArea(AdministradorArea.getInstancia().fromDTOTOModel(platoDTO.getArea())); SE AGREGA EN EL ADMINISTRADOR DE AREA CUANDO LO LLAMA
		plato.setComisionExtra(platoDTO.getComisionExtra());
		plato.setNombre(platoDTO.getNombre());
		plato.setPlatosAlternativos(AdministradorPlato.getInstancia().fromDTOTOModel(platoDTO.getPlatosAlternativos()));
		plato.setPrecio(platoDTO.getPrecio());
		plato.setReceta(AdministradorReceta.getInstancia().fromDTOTOModel(platoDTO.getReceta()));
		}
		return plato;
	}
	
	public List<PlatoDTO> fromModelTODTO(List<Plato> platos) {
		List<PlatoDTO> platosAltDTO=new ArrayList<PlatoDTO>();
		
		for (Plato plato : platos) {
			PlatoDTO platoDTO=this.fromModelTODTO(plato);
			platosAltDTO.add(platoDTO);
		}
		
		return platosAltDTO;
	}

	public PlatoDTO fromModelTODTO(Plato plato) {
		PlatoDTO platoDTO=null;
		if(plato!=null){
			platoDTO=new PlatoDTO();
			platoDTO.setId(plato.getId());
		//plato.setArea(AdministradorArea.getInstancia().fromDTOTOModel(platoDTO.getArea())); SE AGREGA EN EL ADMINISTRADOR DE AREA CUANDO LO LLAMA
			platoDTO.setComisionExtra(plato.getComisionExtra());
			platoDTO.setNombre(plato.getNombre());
			platoDTO.setPlatosAlternativos(AdministradorPlato.getInstancia().fromModelTODTO(plato.getPlatosAlternativos()));
			platoDTO.setPrecio(plato.getPrecio());
			platoDTO.setReceta(AdministradorReceta.getInstancia().fromModelTODTO(plato.getReceta()));
		}
		return platoDTO;
	}
	
	public List<Plato> fromBeanTOModel(List<PlatoBean> platosBean) {
		List<Plato> platosAlt=new ArrayList<Plato>();
		
		for (PlatoBean platoBean : platosBean) {
			Plato plato=this.fromBeanTOModel(platoBean);
			platosAlt.add(plato);
		}
		
		return platosAlt;
	}
	public Plato fromBeanTOModel(PlatoBean platoBean) {
		Plato plato=null;
		if(platoBean!=null){
		plato=new Plato();
		plato.setId(platoBean.getIdPlato());
		
		//plato.setArea(AdministradorArea.getInstancia().fromBeanTOModel(platoBean.getArea())); SE AGREGA EN EL ADMINISTRADOR DE AREA CUANDO LO LLAMA
		plato.setComisionExtra(platoBean.getComisionExtra());
		plato.setNombre(platoBean.getNombre());
		plato.setPlatosAlternativos(AdministradorPlato.getInstancia().fromBeanTOModel(platoBean.getPlatosAlternativos()));
		plato.setPrecio(platoBean.getPrecio());
		plato.setReceta(AdministradorReceta.getInstancia().fromBeanTOModel(platoBean.getReceta()));
		}
		return plato;
	}
	/*public Plato getPlato(int id, Area a) {
		PlatoBean plato=HibernatePlatoDAO.getInstancia().getPlato(id);
		Plato p=this.fromBeanTOModel(plato);
		p.setArea(a);
		return p;
	}*/
	
	public Plato getPlato(int id) {
		PlatoBean plato=HibernatePlatoDAO.getInstancia().getPlato(id);
		Area area=AdministradorArea.getInstancia().fromBeanTOModel(plato.getArea());
		Plato p=this.fromBeanTOModel(plato);
		p.setArea(area);
		return p;
	}
	
	
}
